package com.xiaoye.qbproject.domain;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaoye.qbproject.handler.ZbAttrCustomTypeHandler;
import com.xiaoye.qbproject.util.StringUtils;
import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 装备信息
 *
 * @TableName ZB_INFO
 */
@TableName(value = "ZB_INFO")
@Data
public class ZbInfo implements Serializable {
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    /**
     * 装备信息
     */
    @TableId
    private String id;
    /**
     * 装备名称
     */
    private String name;

    /**
     * 装备类型
     */
    private String type;
    /**
     * 装备特征
     */
    private String feature;
    /**
     * 备注
     */
    private String remark;
    /**
     * 研制国家或地区
     */
    private String sourceCountryId;
    /**
     * 研制国家或地区名称
     */
    @TableField(exist = false)
    private String sourceCountryName;
    /**
     * 研制时间
     */
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private String devTime;
    /**
     * 服役时间
     */
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private String attendedTime;
    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;


    /**
     * 装备属性
     */
    //@TableField(typeHandler = ZbAttrCustomTypeHandler.class)
    @TableField(typeHandler = ZbAttrCustomTypeHandler.class)
    private List<ZbAttr> attrs = new ArrayList<>();

    public static void main(String[] args) {
        //String feature = "初速1370米/秒，最大有效射程3000米，穿甲弹（221mm),破甲弹(330mm)";
        //String feature = "全長9.80m，車体長7.55m，全幅3.40m（サイドスカートを含む），全高2.30m（標準姿勢），重量50.2t，懸架方式ハイブリッド式（油気圧・トーションバー併用），速度70km/h（加速性能0-200mまで20秒），行動距離350km，主砲44口径120mm滑腔砲Rh120，副武装74式車載7.62mm機関銃（主砲同軸），12.7mm重機関銃M2（砲塔上面），装甲複合装甲（砲塔前面及び車体前面），エンジン三菱10ZG32WT（水冷2ストロークV型10気筒ターボチャージド・ディーゼル，1,500ps/2,400rpm（15分間定格出力），最大トルク4,410N･m（450kgf･m），排気量21,500cc），乗員3名。";
        String feature = "空枪：2.88千克\n" +
                "枪托：757毫米\n" +
                "枪管长度\t368.3毫米（14.5寸）\n" +
                "子弹\t5.56×45毫米NATO\n" +
                "口径\t5.56毫米（.223寸）\n" +
                "枪机\t直接导气式、转拴式枪栓\n" +
                "射速\t700—950发／分钟\n" +
                "有效射程\t500米\n" +
                "供弹方式\tSTANAG弹匣、C-Mag弹鼓";

        // 逗号分割
        String[] attrStr = feature.split("[，\n]");
        for (String input : attrStr) {
            System.out.println("==========" + input);
            int i = StringUtils.findFirstDigitPositionRegex(input);
            // 根据数字类型拆分成两段
            if (i != -1) {
                System.out.println(StringUtils.trimBrackets(input.substring(0, i)));
                System.out.println(StringUtils.trimBrackets(input.substring(i)));
            } else {
                System.out.println(input);
            }
            //this.attrs.add(new ZbAttr(attrKeyValue[0], Collections.singletonList(attrKeyValue[1])));
        }

    }

    @Override
    public String toString() {
        String sb = getClass().getSimpleName() +
                " [" +
                "Hash = " + hashCode() +
                ", id=" + id +
                ", name=" + name +
                ", feature=" + feature +
                ", remark=" + remark +
                ", sourceCountryId=" + sourceCountryId +
                ", devTime=" + devTime +
                ", attendedTime=" + attendedTime +
                ", serialVersionUID=" + serialVersionUID +
                "]";
        return sb;
    }

    //战斗全重52吨，乘员4人，最大速48.28km/h
    /*public void setAttrsByFeature(String feature) {
        if (StringUtils.isEmpty(feature)) {
            return;
        }
        // 逗号分割
        String[] attrStr = feature.split("[，\n]");
        for (String input : attrStr) {
            System.out.println("==========" + input);
            int i = StringUtils.findFirstDigitPositionRegex(input);
            // 根据数字类型拆分成两段
            ZbAttr zbAttr = new ZbAttr();
            if (i == -1) {
                zbAttr.setAttrName("---");
                zbAttr.setAttrValueList(input);
           } else {
                zbAttr.setAttrName(StringUtils.trimBrackets(input.substring(0, i)));
                zbAttr.setAttrValueList(StringUtils.trimBrackets(input.substring(i)));
            }
            this.attrs.add(zbAttr);
        }

    }*/

    public void setAttrsByFeature(String feature) {
        if (StringUtils.isEmpty(feature)) {
            return;
        }

        // 使用正则分割：支持中文/英文逗号、换行符
        String[] attrStr = feature.split("[\n]");

        for (String input : attrStr) {
            if (StringUtils.isBlank(input)) {
                continue;  // 跳过空字符串
            }

            ZbAttr zbAttr = new ZbAttr();

            // 优先按冒号分割（支持中文/英文冒号）
            int colonIndex = input.indexOf('：');
            if (colonIndex == -1) {
                colonIndex = input.indexOf(':');
            }

            if (colonIndex != -1) {
                // 分割属性名和属性值
                String namePart = input.substring(0, colonIndex+1).trim();
                String valuePart = input.substring(colonIndex + 1).trim();

                zbAttr.setAttrName(StringUtils.trimBrackets(namePart));
                zbAttr.setAttrValueList(StringUtils.trimBrackets(valuePart));
            }
            // 没有冒号时按数字分割
            else {
                int digitPos = StringUtils.findFirstDigitPositionRegex(input);

                if (digitPos == -1) {
                    zbAttr.setAttrName("---");
                    zbAttr.setAttrValueList(StringUtils.trimBrackets(input));
                } else {
                    zbAttr.setAttrName(StringUtils.trimBrackets(input.substring(0, digitPos).trim()));
                    zbAttr.setAttrValueList(StringUtils.trimBrackets(input.substring(digitPos).trim()));
                }
            }

            this.attrs.add(zbAttr);
        }
    }
}